home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / nss / crmfi.h < prev    next >
C/C++ Source or Header  |  2006-04-20  |  7KB  |  191 lines

  1. /* -*- Mode: C; tab-width: 8 -*-*/
  2. /* ***** BEGIN LICENSE BLOCK *****
  3.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  4.  *
  5.  * The contents of this file are subject to the Mozilla Public License Version
  6.  * 1.1 (the "License"); you may not use this file except in compliance with
  7.  * the License. You may obtain a copy of the License at
  8.  * http://www.mozilla.org/MPL/
  9.  *
  10.  * Software distributed under the License is distributed on an "AS IS" basis,
  11.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12.  * for the specific language governing rights and limitations under the
  13.  * License.
  14.  *
  15.  * The Original Code is the Netscape security libraries.
  16.  *
  17.  * The Initial Developer of the Original Code is
  18.  * Netscape Communications Corporation.
  19.  * Portions created by the Initial Developer are Copyright (C) 1994-2000
  20.  * the Initial Developer. All Rights Reserved.
  21.  *
  22.  * Contributor(s):
  23.  *
  24.  * Alternatively, the contents of this file may be used under the terms of
  25.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  26.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  27.  * in which case the provisions of the GPL or the LGPL are applicable instead
  28.  * of those above. If you wish to allow use of your version of this file only
  29.  * under the terms of either the GPL or the LGPL, and not to allow others to
  30.  * use your version of this file under the terms of the MPL, indicate your
  31.  * decision by deleting the provisions above and replace them with the notice
  32.  * and other provisions required by the GPL or the LGPL. If you do not delete
  33.  * the provisions above, a recipient may use your version of this file under
  34.  * the terms of any one of the MPL, the GPL or the LGPL.
  35.  *
  36.  * ***** END LICENSE BLOCK ***** */
  37.  
  38.  
  39. #ifndef _CRMFI_H_
  40. #define _CRMFI_H_
  41. /* This file will contain all declarations common to both 
  42.  * encoding and decoding of CRMF Cert Requests.  This header 
  43.  * file should only be included internally by CRMF implementation
  44.  * files.
  45.  */
  46. #include "secasn1.h"
  47. #include "crmfit.h"
  48. #include "secerr.h"
  49.  
  50. #define CRMF_DEFAULT_ARENA_SIZE   1024
  51. #define MAX_WRAPPED_KEY_LEN       2048
  52.  
  53.  
  54. #define CRMF_BITS_TO_BYTES(bits) (((bits)+7)/8)
  55. #define CRMF_BYTES_TO_BITS(bytes) ((bytes)*8)
  56.  
  57. struct crmfEncoderArg {
  58.     SECItem *buffer;
  59.     long     allocatedLen;
  60. };
  61.  
  62. struct crmfEncoderOutput {
  63.     CRMFEncoderOutputCallback fn;
  64.     void *outputArg;
  65. };
  66.  
  67. /*
  68.  * This funciton is used by the API for encoding functions that are 
  69.  * exposed through the API, ie all of the CMMF_Encode* and CRMF_Encode*
  70.  * functions.
  71.  */
  72. extern void
  73.        crmf_encoder_out(void *arg, const char *buf, unsigned long len,
  74.                         int depth, SEC_ASN1EncodingPart data_kind);
  75.  
  76. /*
  77.  * This function is used when we want to encode something locally within
  78.  * the library, ie the CertRequest so that we can produce its signature.
  79.  */
  80. extern SECStatus 
  81.        crmf_init_encoder_callback_arg (struct crmfEncoderArg *encoderArg,
  82.                        SECItem               *derDest);
  83.  
  84. /*
  85.  * This is the callback function we feed to the ASN1 encoder when doing
  86.  * internal DER-encodings.  ie, encoding the cert request so we can 
  87.  * produce a signature.
  88.  */
  89. extern void
  90. crmf_generic_encoder_callback(void *arg, const char* buf, unsigned long len,
  91.                   int depth, SEC_ASN1EncodingPart data_kind);
  92.  
  93. /* The ASN1 templates that need to be seen by internal files
  94.  * in order to implement CRMF.
  95.  */
  96. extern const SEC_ASN1Template CRMFCertReqMsgTemplate[];
  97. extern const SEC_ASN1Template CRMFRAVerifiedTemplate[];
  98. extern const SEC_ASN1Template CRMFPOPOSigningKeyTemplate[];
  99. extern const SEC_ASN1Template CRMFPOPOKeyEnciphermentTemplate[];
  100. extern const SEC_ASN1Template CRMFPOPOKeyAgreementTemplate[];
  101. extern const SEC_ASN1Template CRMFThisMessageTemplate[];
  102. extern const SEC_ASN1Template CRMFSubsequentMessageTemplate[];
  103. extern const SEC_ASN1Template CRMFDHMACTemplate[];
  104. extern const SEC_ASN1Template CRMFEncryptedKeyWithEncryptedValueTemplate[];
  105. extern const SEC_ASN1Template CRMFEncryptedValueTemplate[];
  106.  
  107. /*
  108.  * Use these two values for encoding Boolean values.
  109.  */
  110. extern const unsigned char hexTrue;
  111. extern const unsigned char hexFalse;
  112. /*
  113.  * Prototypes for helper routines used internally by multiple files.
  114.  */
  115. extern SECStatus crmf_encode_integer(PRArenaPool *poolp, SECItem *dest, 
  116.                      long value);
  117. extern SECStatus crmf_make_bitstring_copy(PRArenaPool *arena, SECItem *dest, 
  118.                       SECItem *src);
  119.  
  120. extern SECStatus crmf_copy_pkiarchiveoptions(PRArenaPool           *poolp, 
  121.                          CRMFPKIArchiveOptions *destOpt,
  122.                          CRMFPKIArchiveOptions *srcOpt);
  123. extern SECStatus  
  124.        crmf_destroy_pkiarchiveoptions(CRMFPKIArchiveOptions *inArchOptions,
  125.                       PRBool                 freeit);
  126. extern const SEC_ASN1Template*
  127.        crmf_get_pkiarchiveoptions_subtemplate(CRMFControl *inControl);
  128.  
  129. extern SECStatus crmf_copy_encryptedkey(PRArenaPool       *poolp,
  130.                     CRMFEncryptedKey  *srcEncrKey,
  131.                     CRMFEncryptedKey  *destEncrKey);
  132. extern SECStatus
  133. crmf_copy_encryptedvalue(PRArenaPool        *poolp,
  134.              CRMFEncryptedValue *srcValue,
  135.              CRMFEncryptedValue *destValue);
  136.  
  137. extern SECStatus
  138. crmf_copy_encryptedvalue_secalg(PRArenaPool     *poolp,
  139.                 SECAlgorithmID  *srcAlgId,
  140.                 SECAlgorithmID **destAlgId);
  141.  
  142. extern SECStatus crmf_template_copy_secalg(PRArenaPool *poolp, 
  143.                        SECAlgorithmID **dest,
  144.                        SECAlgorithmID *src);
  145.  
  146. extern SECStatus crmf_copy_cert_name(PRArenaPool *poolp, CERTName **dest, 
  147.                      CERTName *src);
  148.  
  149. extern SECStatus crmf_template_add_public_key(PRArenaPool               *poolp,
  150.                           CERTSubjectPublicKeyInfo **dest,
  151.                           CERTSubjectPublicKeyInfo  *pubKey);
  152.  
  153. extern CRMFCertExtension* crmf_create_cert_extension(PRArenaPool *poolp, 
  154.                              SECOidTag    tag, 
  155.                              PRBool       isCritical,
  156.                              SECItem     *data);
  157. extern CRMFCertRequest*
  158. crmf_copy_cert_request(PRArenaPool *poolp, CRMFCertRequest *srcReq);
  159.  
  160. extern SECStatus crmf_destroy_encrypted_value(CRMFEncryptedValue *inEncrValue, 
  161.                           PRBool freeit);
  162.  
  163. extern CRMFEncryptedValue *
  164. crmf_create_encrypted_value_wrapped_privkey(SECKEYPrivateKey   *inPrivKey,
  165.                         SECKEYPublicKey    *inPubKey,
  166.                         CRMFEncryptedValue *destValue);
  167.  
  168. extern CK_MECHANISM_TYPE 
  169.        crmf_get_mechanism_from_public_key(SECKEYPublicKey *inPubKey);
  170.  
  171. extern SECStatus
  172. crmf_encrypted_value_unwrap_priv_key(PRArenaPool        *poolp,
  173.                      CRMFEncryptedValue *encValue,
  174.                      SECKEYPrivateKey   *privKey,
  175.                      SECKEYPublicKey    *newPubKey,
  176.                      SECItem            *nickname,
  177.                      PK11SlotInfo       *slot,
  178.                      unsigned char       keyUsage,
  179.                      SECKEYPrivateKey  **unWrappedKey,
  180.                      void               *wincx);
  181.  
  182. extern SECItem*
  183. crmf_get_public_value(SECKEYPublicKey *pubKey, SECItem *dest);
  184.  
  185. extern CRMFCertExtension*
  186. crmf_copy_cert_extension(PRArenaPool *poolp, CRMFCertExtension *inExtension);
  187.  
  188. extern SECStatus
  189. crmf_create_prtime(SECItem *src, PRTime **dest);
  190. #endif /*_CRMFI_H_*/
  191.